package com.baizhi.controller;

import com.baizhi.dto.TagDTO;
import com.baizhi.entity.Tag;
import com.baizhi.po.TagPO;
import com.baizhi.po.TagsPO;
import com.baizhi.service.TagService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/tags")
public class TagController {

    @Autowired
    private TagService tagService;

    @GetMapping
    public List<TagPO> queryAll() {
        List<Tag> tags = tagService.queryAll();
        List<TagPO> pos = new ArrayList<>();
        for (Tag tag : tags) {
            TagPO tagPO = new TagPO(tag.getId(), tag.getName(), tag.getType(), tag.getCreateDate());
            pos.add(tagPO);
        }
        return pos;
    }


    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        boolean b = tagService.removeById(id);
        return;
    }


    @PostMapping
    public TagPO add(@RequestBody TagDTO tagDTO) {
        Tag tag = tagService.add(tagDTO);
        TagPO tagPO = new TagPO(tag.getId(), tag.getName(), tag.getType(), tag.getCreateDate());
        return tagPO;
    }

    @HystrixCommand(fallbackMethod = "HystrixQueryById")
    @GetMapping("{id}")
    public TagPO queryById(@PathVariable("id") Long id) {
        Tag tag = tagService.queryById(id);
        TagPO tagPO = new TagPO(tag.getId(), tag.getName(), tag.getType(), tag.getCreateDate());
        return tagPO;
    }

    public TagPO HystrixQueryById(@PathVariable("id") Long id) {
        TagPO tagPO = new TagPO();
        tagPO.setId(id);
        tagPO.setName("找不到对应信息");
        tagPO.setCreated_at(new Date());
        tagPO.setType("(#￣～￣#)");
        return tagPO;
    }

    @HystrixCommand(fallbackMethod = "HystrixQueryAlls")
    @GetMapping("/tags")
    public TagsPO queryAlls(@RequestParam Long id) {
        Tag tag = tagService.queryById(id);
        TagsPO tagsPO = new TagsPO(tag.getId(), tag.getName());
        return tagsPO;
    }

    public TagsPO HystrixQueryAlls(@RequestParam Long id) {
        TagsPO tagsPO = new TagsPO();
        tagsPO.setId(id);
        tagsPO.setName("服务不可用");
        return tagsPO;
    }
}
